#include <head.h>


#define FDS_MAX(fd_max , fd) fd_max > fd ? fd_max : fd;

int main(int argc, char const *argv[])
{
    /******************* 打开文件 *******************/
    int fifo_fd_1 = open("fifo_1" , O_RDONLY );
    if(fifo_fd_1 == -1) {ERRLOG("文件打开失败"); return 0;}
    printf("文件1启动成功\n");

    int fifo_fd_2 = open("fifo_2" , O_RDONLY );
    if(fifo_fd_2 == -1) {ERRLOG("文件打开失败"); return 0;}
    printf("文件2启动成功\n");

    int fifo_fd_3 = open("fifo_3" , O_RDONLY );
    if(fifo_fd_3 == -1) {ERRLOG("文件打开失败"); return 0;}
    printf("文件3启动成功\n");


    // 建立 文件描述符数组
    int fifo_fds[3] = {fifo_fd_1 , fifo_fd_2 , fifo_fd_3};

    // 创建 缓冲区
    char buf[1024] = "a";


    /******************* 设定描述符集 *******************/
    fd_set fds; // 母本
    fd_set fd_temp; // 副本
    int fd_len = 0;

    int fd_max = 0;
    // 清空 fds
    FD_ZERO(&fds);
    FD_ZERO(&fd_temp);

    // 添加文件描述符 并更新 文件描述符个数 以及 最大值
    FD_SET(fifo_fd_1 , &fds);
    ++fd_len;
    fd_max = FDS_MAX(fd_max , fifo_fd_1);

    FD_SET(fifo_fd_2 , &fds);
    ++fd_len;
    fd_max = FDS_MAX(fd_max , fifo_fd_2);

    FD_SET(fifo_fd_3 , &fds);
    ++fd_len;
    fd_max = FDS_MAX(fd_max , fifo_fd_3);

    printf("max = %d\nfd_len = %d\n" , fd_max , fd_len);


    while (1)
    {
        fd_temp = fds;
        select(fd_max + 1 , &fd_temp , NULL , NULL , NULL);

        // 
        for (size_t i = 0; i < fd_len; i++)
        {
            if( FD_ISSET( fifo_fds[i] , &fd_temp))
            {
                memset(buf , 0 , sizeof(buf));
                read(fifo_fds[i] , buf, sizeof(buf));
                printf("fifo_%ld = %s\n" , i + 1 , buf);
            }
        }
        
    }
    
    return 0;
}